package InnerClass;
/**
 * Created by Administrator on 2022/8/18.
 */
public class ExampleClass {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 33;

    public void fun() {
        System.out.println("hahaha");
    }

    /**
     * 实例内部类
     * 1. 如何获取 实例内部类的对象
     * 方法一：
     *     ①首先创建一个外部类对象
     *     ExampleClass exampleClass = new ExampleClass();
     *     ②然后  外部类名.内部类名 对象名 = 外部类名.new 内部类名();
     *     ExampleClass.Example exmaple = exampleClass.new Example();
     * 方法二：
     *        外部类与内部类一起创建
     *        ExampleClass.Example exmaple = new ExampleClass().new Example();
     *
     * 2. 实例内部类当中 不能有静态的成员变量. 非要定义，那么只能是被static final修饰的
     * 3. 在实例内部类当中，如何访问外部类当中，相同的成员变量？
     *     在实例内部类当中 获取外部类的this ： ExampleClass.this.data3
     */
    class Example {
        public int data3 = 3;
        public int data4 = 4;
        public static final int data5 = 5;//final相当于常量

        public void func() {
            // 在实例内部类中可以直接访问外部类中：任意访问限定符修饰的成员
            System.out.println(data1);
            System.out.println(data2);
            // 如果外部类和实例内部类中具有相同名称成员时，优先访问的是内部类自己的
            System.out.println(data3);
            // 如果要访问外部类同名成员时候，必须：外部类名称.this.同名成员名字
            System.out.println(ExampleClass.this.data3);
            System.out.println(data4);
            System.out.println(data5);

        }

    }

}

class Test1 {
    public static void main(String[] args) {
        ExampleClass exampleClass = new ExampleClass();
        ExampleClass.Example exmaple = exampleClass.new Example();

        // ExampleClass.Example exmaple = new ExampleClass().new Example();
        exmaple.func();

    }

}
